/*******************************************************************************
* 模块名:led.c
* 代码描述:提示灯
* 作者:LUKELiu
* 创建时间:2022/06/28 14:54:20
******************************************************************************/
#include<led.h>

/*******************************************************************************
* 函数名:delay_ms
* 代码描述:毫秒延时函数
* 参数:time需要延时的ms数
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:20:02
******************************************************************************/
void static delay_ms(unsigned int ms)
{
  unsigned short tmp;
  while(ms--)
  {
    for(tmp = 1000;tmp > 0;tmp--)
    {

    }
  }
}

void led_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(LED_RCC,ENABLE);  //开启A端口时钟
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN | LED2_GPIO_PIN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

  GPIO_Init(LED_GPIO,&GPIO_InitStructure);
  GPIO_SetBits(LED_GPIO,LED1_GPIO_PIN | LED2_GPIO_PIN);
}
/*******************************************************************************
* 函数名:led_turn_on
* 代码描述:打开灯
* 参数:led,需要打开的灯
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:17:03
******************************************************************************/
void led_turn_on(unsigned char led)
{
  if(led & LED1)
  {
    GPIO_ResetBits(LED_GPIO,LED1_GPIO_PIN);
  }
  else if(led & LED2)
  {
    GPIO_ResetBits(LED_GPIO,LED2_GPIO_PIN);
  }
}

/*******************************************************************************
* 函数名:led_turn_off
* 代码描述:关闭灯
* 参数:led,需要关闭的灯
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:17:47
******************************************************************************/
void led_turn_off(unsigned char led)
{
  if(led & LED1)
  {
    GPIO_SetBits(LED_GPIO,LED1_GPIO_PIN);
  }
  else if(led & LED2)
  {
    GPIO_SetBits(LED_GPIO,LED2_GPIO_PIN);
  }
}

/*******************************************************************************
* 函数名:led_breath_onToOff
* 代码描述:呼吸灯，从亮到灭
* 参数:led,需要控制的灯
       time，时间变化
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:18:27
******************************************************************************/
void led_breath_onToOff(unsigned char led,unsigned int time)
{
  int time_on = 0;
  while(time)
  {
    led_turn_on(led);
    delay_ms(time--);
    led_turn_off(led);
    delay_ms(time_on++);
  }
}

/*******************************************************************************
* 函数名:led_breath_offToOn
* 代码描述:呼吸灯，从灭到亮
* 参数:led,需要控制的小灯
*      time，需要控制的时间
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:36:47
******************************************************************************/
void led_breath_offToOn(unsigned char led,unsigned int time)
{
  unsigned short time_on = 0; 
  while(time--)
  {
    led_turn_off(led);
    delay_ms(time--);
    led_turn_on(led);
    delay_ms(time_on++);
  }
}

/*******************************************************************************
* 函数名:led_breah
* 代码描述:一个完整的呼吸灯过程（亮-->灭-->亮）
* 参数:led,需要控制的小灯
*      time，亮灭变化程度
* 作者:LUKE&Liu
* 创建时间:2022/06/28 15:41:28
******************************************************************************/
void led_breath(unsigned char led,unsigned int time)
{
  led_breath_onToOff(led,time);
  led_breath_offToOn(led,time);
}
